package logik;

import interfaces.ILogik;
import interfaces.IPersistens;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.swing.DefaultComboBoxModel;
import javax.swing.DefaultListModel;
import javax.swing.JComboBox;
import javax.swing.JList;
import javax.swing.JTextField;

import org.apache.poi.openxml4j.exceptions.InvalidFormatException;

import persistens.Excelimporter;
import vo.TOExcelArtikel;
import vo.TOExcelBHKW;
import vo.TOExcelMitarbeiter;

public class Exceleintrag implements ILogik {
	private static Exceleintrag logikinstanz;

	private IPersistens persistensInstanz;

	public Exceleintrag() throws InvalidFormatException, IOException {

		persistensInstanz = Excelimporter.ladepersistensInstanz();
		persistensInstanz.read();
	}

	public TOExcelBHKW sucheBHKW(String bhkw_name, String bhkw_nr) {
		//FIXME: Methode wird noch gebraucht?
		ArrayList<TOExcelBHKW> geladeneBHKWListe = persistensInstanz
				.getBHKWListe();

		for (TOExcelBHKW toExcelBHKW : geladeneBHKWListe) {
			if (toExcelBHKW.getBHKW_Name().equals(bhkw_name)
					&& toExcelBHKW.getBHKW_Nr().equals(bhkw_nr)) {
				return toExcelBHKW;
			}
		}
		return null;
	}

	@Override
	public void ladebhkwCB(JComboBox<String> cbbhkw, String bga) {
		ArrayList<TOExcelBHKW> list = persistensInstanz.getBHKWListe();
		DefaultComboBoxModel<String> model = new DefaultComboBoxModel<String>();
		model.addElement("");
		for (TOExcelBHKW item : list) {
			if (item.getBHKW_Name().equals(bga)) {
				model.addElement(item.getBHKW_Nr());
			}
		}
		cbbhkw.setModel(model);
	}


	@Override
	public void ladebgaCB(JComboBox<String> cbbga) {
		ArrayList<TOExcelBHKW> list = persistensInstanz.getBHKWListe();
		ArrayList<String> inhalt = new ArrayList<String>();
		DefaultComboBoxModel<String> model = new DefaultComboBoxModel<String>();
		model.addElement("");
		for (TOExcelBHKW item : list) {
			if (!inhalt.contains(item.getBHKW_Name())) {
				model.addElement(item.getBHKW_Name());
				inhalt.add(item.getBHKW_Name());
			}
		}
		cbbga.setModel(model);
	}


	@Override
	public void ladeMoterSerienNr(JTextField tfMotornummer,
			JTextField tfseriennummer,JTextField  tfkundenname,
			String bga, String bhkw) {
		ArrayList<TOExcelBHKW> list = persistensInstanz.getBHKWListe();
		for (TOExcelBHKW item : list) {
			if (item.getBHKW_Name().equals(bga)
					&& item.getBHKW_Nr().equals(bhkw)) {
				tfMotornummer.setText(item.getMotornummer());
				tfseriennummer.setText(item.getSeriennummer());
				tfkundenname.setText(item.getKundenname());
			}
		}
	}

	@Override
	public void ladeMitarbeiter(JComboBox<String> cbmonteur) {
		List<TOExcelMitarbeiter> mitarbeiterliste = persistensInstanz
				.getMitarbeiterliste();
		DefaultComboBoxModel<String> model = new DefaultComboBoxModel<String>();
		ArrayList<String> inhalt = new ArrayList<String>();
		model.addElement("");
		for (TOExcelMitarbeiter item : mitarbeiterliste) {
			if (!inhalt.contains(item.getName())) {
				model.addElement(item.getName());
				inhalt.add(item.getName());
			}
		}
		cbmonteur.setModel(model);
	}
	
	
	@Override
	public void ladeArtikelliste(JList<String> jlartikelliste) {
		 List<TOExcelArtikel> artikelliste = persistensInstanz.getToExlArtikelliste();
		 DefaultListModel<String> model = new DefaultListModel<String>();
		 for (TOExcelArtikel toExcelArtikel : artikelliste) {
			 model.addElement(toExcelArtikel.gibNrAndName());
		}
		 jlartikelliste.setModel(model);
	}
	
	public static Exceleintrag ladelogikInstanz() throws InvalidFormatException, IOException {
		if (logikinstanz == null) {
			logikinstanz = new Exceleintrag();
		}
		return logikinstanz;
	}

	public static Exceleintrag getLogikinstanz() {
		return logikinstanz;
	}

	public static void setLogikinstanz(Exceleintrag logikinstanz) {
		Exceleintrag.logikinstanz = logikinstanz;
	}

	@Override
	public void saveEntry(String bga, String bhkw, String motornummer, String seriennummer, String kunde) throws IOException {
		persistensInstanz.saveEntry(bga, bhkw, motornummer, seriennummer, kunde);
		
		// TODO Implementierung der Neuen Methode Ziel die 4 attribute in die BHKW exel speichern
		
	}
}
